package main

import "fmt"

/*
	四种变量的声明方式
	注意：变量声明必须使用，否则错误
*/

// 声明全局变量 方法一，二，三是可以的
var gA int
var gB int = 10
var gC = 100

// 声明全局变量 方法四，错误:syntax error: non-declaration statement outside function body
// 只能用在函数体内
// gD := 1000 

func main(){
	// 方法一：声明一个变量，默认值是0
	var a int
	fmt.Println("a = ",a)	
	fmt.Printf("type of a = %T\n",a)

	// 方法二：声明一个变量，初始化一个值
	var b int = 10
	fmt.Println("b = ",b)
	fmt.Printf("type of b = %T\n",b)

	// 方法三：在初始化的时候，可以省去数据类型，通过自动匹配当前的变量的数据类型
	var c = 100
	fmt.Println("c = ",c)
	fmt.Printf("type of c = %T\n",c)
	
	// 方法四：（常用的方法）省去var关键字，直接自动匹配
	d := 1000
	fmt.Println("d = ",d)
	fmt.Printf("type of d = %T\n",d)

	e := "abcd"
	fmt.Println("e = ",e)
	fmt.Printf("type of e = %T\n",e)

	// 全局变量
	fmt.Println("gA = ",gA)
	fmt.Println("gB = ",gB)
	fmt.Println("gC = ",gC)
	//fmt.Println("gD = ",gD)

	// 多个变量声明方式
	var aa,bb int = 10,20
	fmt.Println("aa = ",aa,",bb =",bb)	

	var cc,dd = 100,"acds"
	fmt.Println("cc = ",cc,",dd = ",dd)

	var (
		ee int = 100
		ff bool = true
	)
	fmt.Println("ee = ",ee,",ff = ",ff)
}

